import akshare as ak
import pandas as pd

# 设置 Pandas 的显示选项，让其显示所有行和列
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

def get_multiple_stocks_data(stock_codes):
    """
    使用 akshare 一次性获取多只A股的实时行情数据。

    Args:
        stock_codes (list): 包含多个股票代码的列表，如 ['600519', '000001', '000002']。

    Returns:
        DataFrame: 包含指定股票信息的 DataFrame。如果未找到任何股票，则返回空的 DataFrame。
    """
    if not isinstance(stock_codes, list) or not stock_codes:
        print("输入参数应为非空的股票代码列表。")
        return None

    print(f"正在获取所有A股的实时行情数据，并查询指定股票：{stock_codes}")

    try:
        # 获取所有A股的实时行情数据
        stock_zh_a_spot_df = ak.stock_zh_a_spot_em()

        # 使用 isin() 方法进行批量查询
        # 这会返回一个布尔序列，值为 True 的行表示其 '代码' 在 stock_codes 列表中
        result_df = stock_zh_a_spot_df[stock_zh_a_spot_df['代码'].isin(stock_codes)]

        if not result_df.empty:
            print("成功获取以下股票的实时行情：")
            # 打印查询到的股票名称和代码，方便确认
            print(result_df[['名称', '代码']])
            return result_df
        else:
            print("未找到指定的任何股票代码。")
            return result_df

    except Exception as e:
        print(f"获取数据时发生错误：{e}")
        return None


# --- 调用示例 ---

# 准备一个包含多只股票代码的列表
# 贵州茅台 (600519)、平安银行 (000001)、万科A (000002)
stock_list_to_query = ['300308', '300502', '002837']

# 调用函数进行查询
multiple_stocks_df = get_multiple_stocks_data(stock_list_to_query)

if multiple_stocks_df is not None:
    print("\n--- 查询结果 ---")
    print(multiple_stocks_df)